Visual Basicプログラム作成手順2 (MSComm使用の例)
MSCommコンポーネントの追加
図1に、Visual Basicの画面例を示します。デフォルトで画面左にツールボックスがありますが、MSCommコンポーネントは表示されていません。
![]() |
図1.Visual Basicの画面 |
そこで、ツールボックスにMSCommコンポーネントを追加します。ツールボックス上で右クリックし、「コンポーネント(O)...」を選択すると、図2に示すように追加可能なコンポーネントの一覧表が表示されます。あるいは、「プロジェクト(P)...」から「コンポーネント(O)...」を選択することでも表示できます。ここで、Microsoft Comm Control 5.0 (Visual Basic 5.0の場合)にチェックを入れて「OK」をクリックしてください。
![]() |
図2.コンポーネントの追加ダイアログ(Visual Basic 5.0の場合) |
そうすると、図3に示すようにツールボックスの下欄に、電話の絵のMSCommコンポーネントが表示されます。これで、MSCommコンポーネントが追加されました。
![]() |
図3.ツールボックスにMSComm コンポーネントを追加したところ |
画面のデザイン(フォームウインドウ)
Visual Basicで作成するプログラムは、実行時にウインドウを表示させますので、次に画面のデザインを行います。図4に示すようなフォームウインドウを使って、プログラムの実行時に表示させたいものを配置していきます。API関数を使った方法と同様にして、シリアル通信の送信データを入力するコントロールと、PIC側からの受信データを表示するコントロールを配置します。ここでは図4に示すように、テキストボックスの「Text1」と「Text2」を使いました。また、そのコントロールの役割を識別できるように、テキスト表示として「Label1」と「Label2」も配置しました。なお、簡単なプログラムのタイトル表示として、「Label3」を配置しました。シリアル通信の開始には、コマンドボタンとして、「Command1」を配置しました。MSCommコンポーネントを右上に貼り付けておきますが、プログラムの実行時には表示はされませんので、貼り付ける場所はフォーム内であればどこでも結構です。
![]() |
図4.Visual Basicのフォームウインドウ |
プログラムの記述(フォームモジュール)
Visual Basicでは、フォームを土台にしてプログラムを作っていきますが、その中身は全てフォームモジュールに記述されます。すなわち、フォーム上に配置したコントロールやそのプロパティ、イベントプロシージャ、変数、定数などは、全てフォームモジュールにソースコードとして記述していくわけです。
Private Sub Form_Load() ' 表示文字の初期設定 Text1.Text = "" Text2.Text = "" Label1.Caption = "送信文字" Label2.Caption = "受信文字" |
'(1)Loadイベントプロシージャ '(2)テキストボックス1の文字設定 ' テキストボックス2の文字設定 '(3)ラベル1の表示文字設定 ' ラベル2の表示文字設定 ' ラベル3の表示文字設定 |
Label3.Caption = "簡易通信テストプログラム MSComm" | |
Command1.Caption = "通信テスト開始" ' MSCommコントロールの初期設定 MSComm1.CommPort = 1 MSComm1.Settings = "9600,n,8,1" MSComm1.RThreshold = 1 MSComm1.SThreshold = 1 End Sub |
'(4)コマンドボタンの表示文字設定 '(5)通信ポートCOM1を指定 '(6)通信条件設定 '(7)1バイト受信毎にOnCommイベント発生 ' 送信バッファ空でOnCommイベント発生 |
Private Sub Command1_Click() If MSComm1.PortOpen = False Then MSComm1.PortOpen = True End If Text2.Text = "" MSComm1.Output = Text1.Text & Chr(13) End Sub |
'(8)Command1のクリックイベントプロシージャ '(9)シリアルポートのオープン '(10)テキストボックス2の文字をクリア '(11)データの送信 入力データ+リターン符号の付加 |
Private Sub MSComm1_OnComm() Dim Buffer As Variant Select Case MSComm1.CommEvent Case comEvReceive Buffer = MSComm1.Input Text2.Text = Text2.Text & Buffer |
'(12)送受信のOnCommイベント '(13)受信バッファの変数宣言 '(14)CommEventプロパティに対する処理 '(15)受信データ有り '(16)受信データをバッファに格納 '(17)受信データを順次表示する |
Case comEvSend Case comEvCTS Case comEvDSR Case comEvCD Case comEvRing Case comEvEOF |
'(18)他の通信イベントでは何もしない |
Case comEventBreak MsgBox "中断信号を受信", vbCritical Case comEventCTSTO MsgBox "CTSタイムアウト", vbCritical Case comEventDSRTO MsgBox "DSRタイムアウト", vbCritical Case comEventFrame MsgBox "フレーム エラー", vbCritical Case comEventOverrun MsgBox "ポート オーバーラン", vbCritical Case comEventCDTO MsgBox "CDタイムアウト", vbCritical Case comEventRxOver |
'(19)警告メッセージ アイコンを表示 |
MsgBox "受信バッファ オーバーフロー", vbCritical |
|
Case comEventRxParity MsgBox "パリティ エラー", vbCritical Case comEventTxFull |
|
MsgBox "送信バッファがいっぱい", vbCritical |
|
Case comEventDCB MsgBox "予期しないDCBエラー", vbCritical Case Else MsgBox "その他の通信エラー", vbCritical End Select End Sub |
|
Private Sub Form_Unload(Cancel As Integer) If MSComm1.PortOpen = True Then MSComm1.PortOpen = False End If End Sub |
'(20)Unoadイベントプロシージャ '(21)シルアルポートを閉じる |
→ここをクリックして、下記のプログラムをダウンロードするようにしてください。
(2001.2.19)
ファイル名:「txrx2.lzh」 サイズ57.7kバイト
ソフトはLHA形式で圧縮してあるので、解凍して使ってください。まず、解凍することで現れるフォルダの中にあるMscomm32.ocxを、Windows\Systemにコピーしてください。それから、EXEファイルを実行すれば起動します。特にインストーラーが付属しているわけではありませんので、プログラムファイルへの登録やショートカットの作成はご自分でなさってください。ソフトを削除したい場合は、そのまま削除してください。このソフトを使用していかなる損害が発生しても、当方は一切責任をとりません。
【プログラムの説明】
このプログラムについて、順を追って解説を加えておきましょう。
(1)Loadイベントプロシージャ
Load イベント プロシージャには、フォームの初期設定を行うコードを記述します。たとえば、各コントロールの既定値を設定したり、リスト
ボックス (ListBox) コントロールに表示される内容を記述したり、フォーム レベルの変数を初期化することができます。
(2)テキストボックスの文字設定
テキストボックスの表示文字の初期設定では、表示なしに設定
(3)ラベルの表示文字設定
ラベルの表示文字の設定として、「送信文字」、「受信文字」、「簡易通信プログラム」といった文字を表示
(4)コマンドボタンの表示文字設定
コマンドボタンの表示文字の設定として、「通信テスト開始」といった文字を表示
(5)通信ポートの指定
CommPort プロパティを使用して、どのシリアル ポートを開くかを指定します。この例では、通信機器が
COM1 ポートに接続されているものとして、プロパティの値を 1 (COM1) に設定しています。CommPort
プロパティの既定値は 1 で、1 〜 16 の範囲の任意の数値を設定できます。ただし、アプリケーションが動作するシステムに存在しない
COM ポート番号を指定すると、エラーが発生します。
(6)通信条件設定
Settings プロパティを使用して、通信速度、パリティ、データ長、およびストップビットを指定します。指定フォーマットは "BBBB,P,D,S" です。ここで
BBBB は通信速度 (bps)、P はパリティ、D はデータ長、S はストップ ビット長です。特に指定しない限り、通信速度は
9600bps に設定されます。パリティは、データの伝送エラーをチェックするために設定します。通常、パリティは使用しないので
"N" に設定します。データ長では、何ビットで 1 バイト分のデータを表すかを指定します。ストップビットは、データの受信を
1 バイト分ごとに同期をとって行うために使用されます。(詳細は、前ページの 表2 Settings プロパティを参照)
(7)1バイト受信毎にOnCommイベント発生
MSCommコントロールの送受信のOnCommイベントを発生させるためには、送信はバッファが空になった時に、受信は、毎回のデータの受信ごとに発生するように、スレッショルドを1にセットしておきます。
(8)Command1のクリックイベントプロシージャ
マウスで「Command1」のオブジェクトをポイントした後、マウスボタンを押して離したときに発生します。
(9)シリアルポートのオープン
PortOpen プロパティを使って接続を確立します。PortOpen プロパティの値はブール型で、真
(True) または偽 (False) となります。PortOpen プロパティの値がFalseでクローズされているときには、Trueにしてオープンします。
なお、ポートに異常がある場合や、CommPort プロパティの設定値が正しくない場合、または使用するシリアル
デバイスが、指定されたパラメータ値をサポートしていない場合は、エラーが発生したり、外部デバイスが正常に動作しないことがあります。
(10)テキストボックス2の文字をクリア
テキストボックス2(受信文字欄)に、前回受信した文字が表示されていれば、クリアしておきます。
(11)データの送信 入力データ+リターン符号の付加
Output プロパティを使用して、テキスト文字列を送信します。テキスト文字列の末尾にはキャリッジ
リターン符号を付加しておきます。
(12)送受信のOnCommイベント
MSCommコントロールの送受信のOnCommイベントは、送信はバッファが空になった時に、受信は、毎回のデータの受信ごとに発生するようにしてあります。また、通信エラーになっても、OnComm
イベントが発生します。
(13)受信バッファの変数宣言
受信した文字を格納しておく変数を宣言します。汎用的に使える型変数としてバリアント型にしてあります。
(14)CommEventプロパティに対する処理
CommEvent プロパティを参照すると、OnComm イベントが発生する原因になった具体的なエラーまたはイベントを調べることができます。
(15)受信データ有り
RThreshold プロパティで指定された文字数を受信。このイベントは、Input プロパティを使って受信バッファからデータを削除するまで、絶えず発生します。
(16)受信データをバッファに格納
Input プロパティを使って受信バッファにデータを格納します。
(17)受信データを順次表示する
受信したデータを順次、受信テキストボックスに表示します。
(18)他の通信イベントでは何もしない
CommEvent プロパティを参照すると、OnComm イベントが発生する原因になった他のイベントを調べることができます。受信イベント以外の通信イベントの発生では、特に何もしません。(詳細は、前ページの 表4.CommEvent プロパティの通信イベント定数を参照)
(19)警告メッセージ アイコンを表示
CommEvent プロパティを参照すると、OnComm イベントが発生する原因になった通信エラーを調べることができます。通信エラーの発生では、メッセージを表示するようにします。(詳細は、前ページの 表3.CommEvent プロパティの通信エラー定数を参照)
(20)Unoadイベントプロシージャ
フォームが画面から消去 (アンロード) されるときに発生します。
(21)シルアルポートを閉じる
シリアル ポートは、PortOpen プロパティを使って接続を解除できます。
![]() |
|
![]() |